<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title>区块链&amp;区块链安全相关文献阅读笔记 | ChenDong Zhu&#39;s Blog</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noodp" />
<meta name="Description" content="区块链安全的论文阅读笔记"><link rel="prev" href="/2021/03/risc-v-%E6%9E%B6%E6%9E%84%E5%AD%A6%E4%B9%A0/" /><link rel="next" href="/2021/09/%E4%BF%A1%E6%81%AF%E8%AE%BA/" /><link rel="canonical" href="/2021/09/%E5%8C%BA%E5%9D%97%E9%93%BE%E4%B8%8E%E5%8C%BA%E5%9D%97%E9%93%BE%E5%AE%89%E5%85%A8/" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff"><meta property="og:title" content="区块链&amp;区块链安全相关文献阅读笔记" />
<meta property="og:description" content="区块链安全的论文阅读笔记" />
<meta property="og:type" content="article" />
<meta property="og:url" content="/2021/09/%E5%8C%BA%E5%9D%97%E9%93%BE%E4%B8%8E%E5%8C%BA%E5%9D%97%E9%93%BE%E5%AE%89%E5%85%A8/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2021-09-14T09:00:00+08:00" />
<meta property="article:modified_time" content="2020-09-30T15:00:00+08:00" />

<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="区块链&amp;区块链安全相关文献阅读笔记"/>
<meta name="twitter:description" content="区块链安全的论文阅读笔记"/>
<script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "BlogPosting",
        "headline": "区块链\u0026区块链安全相关文献阅读笔记",
        "mainEntityOfPage": {
            "@type": "WebPage",
            "@id": "\/2021\/09\/%E5%8C%BA%E5%9D%97%E9%93%BE%E4%B8%8E%E5%8C%BA%E5%9D%97%E9%93%BE%E5%AE%89%E5%85%A8\/"
        },"image": {
                "@type": "ImageObject",
                "url": "\/cover.png",
                "width":  800 ,
                "height":  600 
            },"genre": "posts","keywords": "信息安全, 区块链","wordcount":  8085 ,
        "url": "\/2021\/09\/%E5%8C%BA%E5%9D%97%E9%93%BE%E4%B8%8E%E5%8C%BA%E5%9D%97%E9%93%BE%E5%AE%89%E5%85%A8\/","datePublished": "2021-09-14T09:00:00\u002b08:00","dateModified": "2020-09-30T15:00:00\u002b08:00","license": "This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.","publisher": {
                "@type": "Organization",
                "name": "xxxx",
                "logo": {
                "@type": "ImageObject",
                "url": "\/logo.png",
                "width":  127 ,
                "height":  40 
                }
            },"description": "区块链安全的论文阅读笔记"
    }
    </script><link rel="stylesheet" href="/css/style.min.css"><link rel="stylesheet" href="/css/lib/fontawesome-free/all.min.css"><link rel="stylesheet" href="/css/lib/animate/animate.min.css"></head>
    <body><script>
            window.isDark = (window.localStorage && window.localStorage.getItem('theme')) === 'dark';
            window.isDark && document.body.classList.add('dark-theme');
        </script><div class="wrapper"><nav class="navbar">
    <div class="navbar-container">
        <div class="navbar-header animated bounceIn">
            <a href="/">ChenDong Zhu&#39;s Blog</a>
        </div>
        <div class="navbar-menu"><a class="menu-item" href="/posts" title="">文章</a><a class="menu-item" href="/tags" title="">标签</a><a class="menu-item" href="/categories" title="">分类</a><a class="menu-item" href="/about" title="">关于</a><a class="menu-item" href="https://hugo-loveit-en.netlify.com" title="English"><i class="fas fa-language fa-fw"></i></a><a href="javascript:void(0);" class="theme-switch"><i class="fas fa-adjust fa-rotate-180 fa-fw" title="切换主题"></i></a>
        </div>
    </div>
</nav><nav class="navbar-mobile">
    <div class="navbar-container">
        <div class="navbar-header">
            <div class="navbar-header-title animated bounceIn">
                <a href="/">ChenDong Zhu&#39;s Blog</a>
            </div>
            <div class="menu-toggle" id="menu-toggle">
                <span></span><span></span><span></span>
            </div>
        </div>
        <div class="navbar-menu" id="mobile-menu"><a class="menu-item" href="/posts" title="">文章</a><a class="menu-item" href="/tags" title="">标签</a><a class="menu-item" href="/categories" title="">分类</a><a class="menu-item" href="/about" title="">关于</a><a class="menu-item" href="https://hugo-loveit-en.netlify.com" title="English"></a><a href="javascript:void(0);" class="theme-switch"><i class="fas fa-adjust fa-rotate-180 fa-fw" title="切换主题"></i></a>
        </div>
    </div>
</nav><main class="main">
                <div class="container"><article class="page"><h1 class="post-title animated flipInX">区块链&amp;区块链安全相关文献阅读笔记</h1><div class="post-meta">
            <div class="post-meta-main"><a class="author" href="/" rel="author" target="_blank">
                    <i class="fas fa-user-circle fa-fw"></i>ChenDong Zhu
                </a>&nbsp;<span class="post-category">收录于&nbsp;<i class="far fa-folder fa-fw"></i><a href="/categories/%E5%AD%A6%E4%B9%A0/">学习</a>&nbsp;</span></div>
            <div class="post-meta-other"><i class="far fa-calendar-alt fa-fw"></i><time datetime=2021-09-14>2021-09-14</time>&nbsp;
                <i class="fas fa-pencil-alt fa-fw"></i>约 8085 字&nbsp;
                <i class="far fa-clock fa-fw"></i>预计阅读 17 分钟&nbsp;</div>
        </div><div class="post-toc" id="post-toc">
                <h2 class="post-toc-title">目录</h2>
                <div class="post-toc-content"><nav id="TableOfContents">
  <ul>
    <li><a href="#1-区块链安全隐私与性能问题研究综述">1 区块链安全、隐私与性能问题研究综述</a>
      <ul>
        <li><a href="#文章贡献创新点">文章贡献/创新点</a></li>
        <li><a href="#文章内容笔记">文章内容笔记</a>
          <ul>
            <li><a href="#区块链的核心技术">区块链的核心技术</a></li>
            <li><a href="#对等网络">对等网络</a></li>
            <li><a href="#密码学">密码学</a></li>
            <li><a href="#共识机制">共识机制</a></li>
            <li><a href="#智能合约">智能合约</a></li>
            <li><a href="#区块链安全">区块链安全</a>
              <ul>
                <li><a href="#对等网络-1">对等网络</a></li>
                <li><a href="#共识机制-1">共识机制</a></li>
                <li><a href="#智能合约-1">智能合约</a></li>
              </ul>
            </li>
            <li><a href="#区块链隐私">区块链隐私</a></li>
            <li><a href="#区块链性能">区块链性能</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#2-中国区块链技术和应用发展白皮书2016">2 中国区块链技术和应用发展白皮书（2016）</a>
      <ul>
        <li><a href="#文章贡献创新点-1">文章贡献/创新点</a></li>
        <li><a href="#文章内容笔记-1">文章内容笔记</a>
          <ul>
            <li><a href="#常用缩略语">常用缩略语</a></li>
            <li><a href="#区块链的演进路径">区块链的演进路径</a></li>
            <li><a href="#区块链类型">区块链类型</a></li>
            <li><a href="#区块链数据结构">区块链数据结构</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#3-bitcoin-a-peer-to-peer-electronic-cash-system">3 Bitcoin: A Peer-to-Peer Electronic Cash System</a>
      <ul>
        <li><a href="#文章贡献创新点-2">文章贡献/创新点</a></li>
        <li><a href="#文章内容笔记-2">文章内容笔记</a>
          <ul>
            <li><a href="#transactions交易">Transactions交易</a></li>
            <li><a href="#timestamp-server-时间戳">Timestamp Server 时间戳</a></li>
            <li><a href="#proof-of-work-工作量证明">Proof-of-Work 工作量证明</a></li>
            <li><a href="#network-网络的运作">Network 网络的运作</a></li>
            <li><a href="#incentive-激励">Incentive 激励</a></li>
            <li><a href="#reclaiming-disk-space-需要的硬盘存储">Reclaiming Disk Space 需要的硬盘存储</a></li>
            <li><a href="#simplified-payment-verification-简化的交易验证">Simplified Payment Verification 简化的交易验证</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#4-智能合约安全漏洞研究综述">4 智能合约安全漏洞研究综述</a>
      <ul>
        <li><a href="#文章贡献创新点-3">文章贡献/创新点</a></li>
        <li><a href="#文章内容">文章内容</a>
          <ul>
            <li><a href="#智能合约特性">智能合约特性</a></li>
            <li><a href="#智能合约安全威胁">智能合约安全威胁</a></li>
            <li><a href="#漏洞挖掘研究工作列表">漏洞挖掘研究工作列表</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#5-making-smart-contracts-smarter">5 Making Smart Contracts Smarter</a>
      <ul>
        <li><a href="#文章贡献">文章贡献</a></li>
        <li><a href="#文章内容-1">文章内容</a>
          <ul>
            <li><a href="#形式化方法">形式化方法</a></li>
            <li><a href="#oyente的结构">OYENTE的结构</a></li>
          </ul>
        </li>
        <li><a href="#思考问题">思考&amp;问题</a></li>
      </ul>
    </li>
    <li><a href="#6-learning-to-fuzz-from-symbolic-execution-with-application-to-smart-contracts">6 Learning to Fuzz from Symbolic Execution with Application to Smart Contracts</a>
      <ul>
        <li><a href="#文章贡献-1">文章贡献</a></li>
        <li><a href="#文章内容-2">文章内容</a></li>
      </ul>
    </li>
    <li><a href="#7-osiris-hunting-for-integer-bugs-in-ethereum-smart-contracts">7 OSIRIS: Hunting for Integer Bugs in Ethereum Smart Contracts</a>
      <ul>
        <li><a href="#文章贡献创新点-4">文章贡献/创新点</a></li>
        <li><a href="#文章内容-3">文章内容</a>
          <ul>
            <li><a href="#solidity中整数长度的问题">Solidity中整数长度的问题</a></li>
            <li><a href="#arithmetic-bugs-及其检测方式">Arithmetic bugs 及其检测方式</a></li>
            <li><a href="#truncation-bugs-截断错误">Truncation Bugs 截断错误</a></li>
            <li><a href="#signedness-bugs">Signedness Bugs</a></li>
            <li><a href="#类型推断">类型推断</a></li>
            <li><a href="#污点分析-taint-analysis">污点分析 Taint Analysis</a></li>
            <li><a href="#定义benign-integer-bugs">定义Benign Integer Bugs</a></li>
            <li><a href="#评估">评估</a></li>
          </ul>
        </li>
        <li><a href="#思考问题-1">思考&amp;问题</a></li>
      </ul>
    </li>
    <li><a href="#font-colorred8-mpro-combining-static-and-symbolic-analysis-for-scalable-testing-of-smart-contractfont"><font color="red">8 MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart Contract</font></a>
      <ul>
        <li><a href="#文章贡献-2">文章贡献</a></li>
        <li><a href="#文章内容-4">文章内容</a>
          <ul>
            <li><a href="#key-observation">key observation</a></li>
            <li><a href="#检测方法">检测方法</a></li>
          </ul>
        </li>
        <li><a href="#评估-1">评估</a></li>
        <li><a href="#思考问题-2">思考&amp;问题</a></li>
      </ul>
    </li>
  </ul>
</nav></div>
            </div>
            <div class="post-toc-mobile" id="post-toc-mobile">
                <details>
                    <summary>
                        <div class="post-toc-title">
                            <span>目录</span>
                            <span><i class="details icon fas fa-angle-down"></i></span>
                        </div>
                    </summary>
                    <div class="post-toc-content"><nav id="TableOfContentsMobile">
  <ul>
    <li><a href="#1-区块链安全隐私与性能问题研究综述">1 区块链安全、隐私与性能问题研究综述</a>
      <ul>
        <li><a href="#文章贡献创新点">文章贡献/创新点</a></li>
        <li><a href="#文章内容笔记">文章内容笔记</a>
          <ul>
            <li><a href="#区块链的核心技术">区块链的核心技术</a></li>
            <li><a href="#对等网络">对等网络</a></li>
            <li><a href="#密码学">密码学</a></li>
            <li><a href="#共识机制">共识机制</a></li>
            <li><a href="#智能合约">智能合约</a></li>
            <li><a href="#区块链安全">区块链安全</a>
              <ul>
                <li><a href="#对等网络-1">对等网络</a></li>
                <li><a href="#共识机制-1">共识机制</a></li>
                <li><a href="#智能合约-1">智能合约</a></li>
              </ul>
            </li>
            <li><a href="#区块链隐私">区块链隐私</a></li>
            <li><a href="#区块链性能">区块链性能</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#2-中国区块链技术和应用发展白皮书2016">2 中国区块链技术和应用发展白皮书（2016）</a>
      <ul>
        <li><a href="#文章贡献创新点-1">文章贡献/创新点</a></li>
        <li><a href="#文章内容笔记-1">文章内容笔记</a>
          <ul>
            <li><a href="#常用缩略语">常用缩略语</a></li>
            <li><a href="#区块链的演进路径">区块链的演进路径</a></li>
            <li><a href="#区块链类型">区块链类型</a></li>
            <li><a href="#区块链数据结构">区块链数据结构</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#3-bitcoin-a-peer-to-peer-electronic-cash-system">3 Bitcoin: A Peer-to-Peer Electronic Cash System</a>
      <ul>
        <li><a href="#文章贡献创新点-2">文章贡献/创新点</a></li>
        <li><a href="#文章内容笔记-2">文章内容笔记</a>
          <ul>
            <li><a href="#transactions交易">Transactions交易</a></li>
            <li><a href="#timestamp-server-时间戳">Timestamp Server 时间戳</a></li>
            <li><a href="#proof-of-work-工作量证明">Proof-of-Work 工作量证明</a></li>
            <li><a href="#network-网络的运作">Network 网络的运作</a></li>
            <li><a href="#incentive-激励">Incentive 激励</a></li>
            <li><a href="#reclaiming-disk-space-需要的硬盘存储">Reclaiming Disk Space 需要的硬盘存储</a></li>
            <li><a href="#simplified-payment-verification-简化的交易验证">Simplified Payment Verification 简化的交易验证</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#4-智能合约安全漏洞研究综述">4 智能合约安全漏洞研究综述</a>
      <ul>
        <li><a href="#文章贡献创新点-3">文章贡献/创新点</a></li>
        <li><a href="#文章内容">文章内容</a>
          <ul>
            <li><a href="#智能合约特性">智能合约特性</a></li>
            <li><a href="#智能合约安全威胁">智能合约安全威胁</a></li>
            <li><a href="#漏洞挖掘研究工作列表">漏洞挖掘研究工作列表</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#5-making-smart-contracts-smarter">5 Making Smart Contracts Smarter</a>
      <ul>
        <li><a href="#文章贡献">文章贡献</a></li>
        <li><a href="#文章内容-1">文章内容</a>
          <ul>
            <li><a href="#形式化方法">形式化方法</a></li>
            <li><a href="#oyente的结构">OYENTE的结构</a></li>
          </ul>
        </li>
        <li><a href="#思考问题">思考&amp;问题</a></li>
      </ul>
    </li>
    <li><a href="#6-learning-to-fuzz-from-symbolic-execution-with-application-to-smart-contracts">6 Learning to Fuzz from Symbolic Execution with Application to Smart Contracts</a>
      <ul>
        <li><a href="#文章贡献-1">文章贡献</a></li>
        <li><a href="#文章内容-2">文章内容</a></li>
      </ul>
    </li>
    <li><a href="#7-osiris-hunting-for-integer-bugs-in-ethereum-smart-contracts">7 OSIRIS: Hunting for Integer Bugs in Ethereum Smart Contracts</a>
      <ul>
        <li><a href="#文章贡献创新点-4">文章贡献/创新点</a></li>
        <li><a href="#文章内容-3">文章内容</a>
          <ul>
            <li><a href="#solidity中整数长度的问题">Solidity中整数长度的问题</a></li>
            <li><a href="#arithmetic-bugs-及其检测方式">Arithmetic bugs 及其检测方式</a></li>
            <li><a href="#truncation-bugs-截断错误">Truncation Bugs 截断错误</a></li>
            <li><a href="#signedness-bugs">Signedness Bugs</a></li>
            <li><a href="#类型推断">类型推断</a></li>
            <li><a href="#污点分析-taint-analysis">污点分析 Taint Analysis</a></li>
            <li><a href="#定义benign-integer-bugs">定义Benign Integer Bugs</a></li>
            <li><a href="#评估">评估</a></li>
          </ul>
        </li>
        <li><a href="#思考问题-1">思考&amp;问题</a></li>
      </ul>
    </li>
    <li><a href="#font-colorred8-mpro-combining-static-and-symbolic-analysis-for-scalable-testing-of-smart-contractfont"><font color="red">8 MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart Contract</font></a>
      <ul>
        <li><a href="#文章贡献-2">文章贡献</a></li>
        <li><a href="#文章内容-4">文章内容</a>
          <ul>
            <li><a href="#key-observation">key observation</a></li>
            <li><a href="#检测方法">检测方法</a></li>
          </ul>
        </li>
        <li><a href="#评估-1">评估</a></li>
        <li><a href="#思考问题-2">思考&amp;问题</a></li>
      </ul>
    </li>
  </ul>
</nav></div>
                </details>
            </div><div class="post-content"><a class="post-dummy-target" id="1-区块链安全隐私与性能问题研究综述"></a><h2>1 区块链安全、隐私与性能问题研究综述</h2>
<ul>
<li>
<p>DOI:10.13196/j.cims.2021.07.022</p>
</li>
<li>
<p>作者:曹雪莲，张建辉，刘波</p>
</li>
</ul>
<a class="post-dummy-target" id="文章贡献创新点"></a><h3>文章贡献/创新点</h3>
<ul>
<li>基于区块链层次结构与运行原理，就对等网络、共识机制和智能合约层面的安全问题及攻防措施进行分析评估</li>
<li>基于区块链隐私威胁基本原理，比较分析不同隐私保护对象的分级隐私保护策略</li>
<li>通过分析性能制约因素，评估基于链上与链下两种扩容路线的最新研究进展</li>
<li>针对安全、隐私和性能的现存问题，提出可能的解决思路并指出未来研究方向</li>
</ul>
<a class="post-dummy-target" id="文章内容笔记"></a><h3>文章内容笔记</h3>
<a class="post-dummy-target" id="区块链的核心技术"></a><h4>区块链的核心技术</h4>
<p>区块链是一种<font color="red">按时间顺序</font>，将包含有效交易的数据区块连接形成的链式数据结构，并以<font color="red">密码学</font>方式保证不可篡改和不可伪造的去中心化共享账本；利用密码学产生的链式数据结构来存储和验证数据，利用<font color="red">对等网络和共识机制</font>来生成和更新数据，利用脚本代码(<font color="red">智能合约</font>)操作数据</p>
<a class="post-dummy-target" id="对等网络"></a><h4>对等网络</h4>
<ul>
<li>在对等节点之间分配任务和工作负载的分布式应用架构，是对等计算模型形成的一种组网技术或网络通信形式</li>
<li>网络中<font color="red">不存在中心权威节点</font></li>
</ul>
<a class="post-dummy-target" id="密码学"></a><h4>密码学</h4>
<p>运用哈希函数，非对称加密技术等多种密码学技术来保证区块链的完整、不可篡改及可校验等特性</p>
<a class="post-dummy-target" id="共识机制"></a><h4>共识机制</h4>
<blockquote>
<p>如何使信任关系薄弱的节点针对区块有效性达成一致意见，并保存一致的数据副本使区块链中的<font color="red">共识问题</font></p>
</blockquote>
<p>共识机制主要解决两个问题：</p>
<ul>
<li>区块数据写入</li>
<li>区块同步</li>
</ul>
<p>共识机制的目标</p>
<ul>
<li>一致性，所有诚实节点保存的区块链的前缀部分完全相同</li>
<li>有效性，某诚实节点发布的信息终将被其他所有诚实节点记录在自己的区块链中</li>
</ul>
<a class="post-dummy-target" id="智能合约"></a><h4>智能合约</h4>
<ul>
<li>公开透明，任何节点都可以查看合约代码</li>
<li>不可更改，区块链保证存储数据的不可篡改性</li>
<li>可自动执行，外部时间触发预设条件后，智能合约按照预先封装的响应规则进行相应操作</li>
<li>（利用虚拟机作为智能合约执行环境来对合约调用所需资源进行隔离和限制）</li>
<li>（智能合约编程语言以领域专用语言为主，如Solidity）</li>
</ul>
<p>区块链的智能合约使部署在区块链上的<font color="red">可共享程序代码</font>，它封装了预定义的若干状态、转换规则、触发条件和响应规则，可在不依赖任何中心机构的情况下被多个节点执行，并<font color="red">得到各参与方认可的执行结果</font></p>
<a class="post-dummy-target" id="区块链安全"></a><h4>区块链安全</h4>
<p>主要针对<font color="red">对等网络、共识机制和智能合约</font>(密码学隐患较小)</p>
<a class="post-dummy-target" id="对等网络-1"></a><h5>对等网络</h5>
<p><strong>威胁</strong></p>
<ul>
<li>攻击者通过拓扑结构获取目标节点的路由信息，并伪造多个身份活干扰路由以阻碍目标节点与其余节点通讯，即<font color="red">拓扑结构引发的安全问题</font></li>
<li>增加对等节点之间的通信传输延迟而影响共识，即<font color="red">传输延迟问题</font></li>
</ul>
<p>（日蚀攻击，女巫攻击，克隆攻击）</p>
<p><strong>对策</strong></p>
<p>针对拓扑结构引发的问题</p>
<ul>
<li>限制节点创建</li>
<li>设置节点间的链接</li>
<li>增加连接选择</li>
<li>异常检测机制</li>
</ul>
<p>（确定性随机驱逐过程，试探连接，驱逐前验证，设置节点TCP连接上限、IP地址和椭圆曲线数字签名密钥一一映射）</p>
<p>针对传输延迟问题</p>
<ul>
<li>多种中继网络如:FIBRE,Falcon,SABRE</li>
<li>(一定程度减少了传输延迟，但仍有问题)</li>
</ul>
<a class="post-dummy-target" id="共识机制-1"></a><h5>共识机制</h5>
<ul>
<li><font color="red">工作量证明/权益证明共识机制</font>假设攻击者掌握不超过全网一般的算力/权益时系统是安全的</li>
<li><font color="red">实用拜占庭容错共识机制</font>可容忍不超过三分之一的节点失效或恶意节点</li>
</ul>
<p><strong>威胁</strong></p>
<ul>
<li>（网络中心化）51%攻击：节点聚集算力/权益形成的矿池使51%攻击成为可能</li>
<li>（偏离共识规则的策略）利用矿池对区块生成情况和其余矿池算力等信息，使用偏离共识规则的策略
<ul>
<li>自私挖矿策略（计算出新区块后择机公布）</li>
<li>区块截留策略（部分节点入侵其余矿池）</li>
</ul>
</li>
<li>（共识机制的缺点）实用拜占庭容错共识机制和一些新共识机制<font color="red">依赖一些特殊节点</font></li>
</ul>
<p><strong>对策</strong></p>
<ul>
<li>（网络中心化，多是理论研究，难以有效应用）
<ul>
<li>SMART-POOL避免形成大矿池</li>
<li>利用博弈论和机器学习，实时监测节点间潜在的合作行为</li>
<li>矿池“关闭”策略</li>
</ul>
</li>
<li>（偏离共识规则的策略）
<ul>
<li>不同影响因素下各种策略的盈利能力以及共识工程中对此类策略的检测并提出对策</li>
</ul>
</li>
<li>（共识机制的缺点）
<ul>
<li>引入奖励机制</li>
<li>改变区块结构设计</li>
</ul>
</li>
</ul>
<a class="post-dummy-target" id="智能合约-1"></a><h5>智能合约</h5>
<p><strong>威胁</strong></p>
<ul>
<li>不安全的合约编程，编程语言本身的缺陷，编程人员对编程语言的理解偏差</li>
<li>不可靠的合约执行，执行环境和执行数据的安全性</li>
</ul>
<p><strong>对策</strong></p>
<p>合约编程&amp;合约执行环境</p>
<ul>
<li>使用通用编程语言如JAVA、GO</li>
<li>提出新的领域专用语言</li>
<li>符号执行技术</li>
<li>形式化验证技术</li>
<li>模糊测试技术</li>
<li>利用博弈论、深度学习进行安全分析</li>
<li>可信硬件</li>
<li>容错合约</li>
</ul>
<p>合约执行数据</p>
<ul>
<li>提供可靠执行数据</li>
</ul>
<a class="post-dummy-target" id="区块链隐私"></a><h4>区块链隐私</h4>
<p>区块链<font color="red">假名机制</font>：利用密码学技术计算出的地址代表用户身份（用户可以生成任意数量的地址，同一用户的不同地址可单独使用且不存在关联关系）</p>
<p>由于区块链中交易数据、合约代码公开，所以可以通过分析数据获得更多隐私</p>
<p><strong>威胁</strong>：主要来源于攻击者对于交易、网络通信、智能合约（计算敏感数据，如拍卖合约中的竞价金额）等信息的恶意窃取和利用</p>
<p><strong>对策</strong></p>
<ul>
<li>交易内容
<ul>
<li>地址混淆机制：不同用户建通过交易来实现资产交换、混淆用户地址的一种隐私保护机制（典型应用CoinJoin）</li>
<li>信息隐藏技术：环签名、零知识证明、同态加密</li>
</ul>
</li>
<li>网络通信
<ul>
<li>混淆网络（如Nym）</li>
<li>洋葱路由技术（保护网络通信的真实发送节点和接受节点，实现节点的匿名通信）</li>
</ul>
</li>
<li>智能合约(这方面还有待改进)
<ul>
<li>结合<font color="red">可信硬件</font>（Ekiden）</li>
<li>密码学中的承诺，可信硬件和零知识证明</li>
</ul>
</li>
</ul>
<a class="post-dummy-target" id="区块链性能"></a><h4>区块链性能</h4>
<ul>
<li>吞吐量远低于VISA</li>
<li>全网存储使数据存储更加困难
<ul>
<li>比特币中完全同步自创世区块至今的所有历史数据需要318.1GB（每年增长61.59GB）</li>
<li>以太坊历史数据604.29GB(每年增长2~3GB)</li>
</ul>
</li>
<li>单链结构使区块链的交易能力受限于单个节点</li>
</ul>
<p><strong>优化方向</strong></p>
<ul>
<li>链上扩容
<ul>
<li>增加区块容量</li>
<li>有向无环图</li>
<li>分片</li>
</ul>
</li>
<li>链下扩容
<ul>
<li>侧链（为某种主链提供支持和服务的区块链）</li>
<li>支付通道</li>
</ul>
</li>
</ul>
<a class="post-dummy-target" id="2-中国区块链技术和应用发展白皮书2016"></a><h2>2 中国区块链技术和应用发展白皮书（2016）</h2>
<ul>
<li><a href="https://www.jianguoyun.com/p/DZAHncgQ1I_rCRiniY0E" target="_blank">文件获取</a></li>
<li>指导单位：工业和信息化部信息化和软件服务业司</li>
<li>编写单位：中国区块链技术和产业发展论坛</li>
</ul>
<a class="post-dummy-target" id="文章贡献创新点-1"></a><h3>文章贡献/创新点</h3>
<ul>
<li>国内外区块链发展现状的研究分析</li>
<li>区块链典型应用场景及典型应用分析</li>
<li>提出我国区块链技术发展路线的建议</li>
<li>首次提出我国区块链标准化路线图</li>
</ul>
<a class="post-dummy-target" id="文章内容笔记-1"></a><h3>文章内容笔记</h3>
<a class="post-dummy-target" id="常用缩略语"></a><h4>常用缩略语</h4>
<table>
<thead>
<tr>
<th>缩略语</th>
<th>原始术语</th>
</tr>
</thead>
<tbody>
<tr>
<td>PoW</td>
<td>工作量证明（Proof of Work）</td>
</tr>
<tr>
<td>PoS</td>
<td>权益证明（Proof of Stake）</td>
</tr>
<tr>
<td>DPos</td>
<td>股份授权证明（Delegate Proof of Stake）</td>
</tr>
<tr>
<td>PBFT</td>
<td>使用拜占庭容错（Practical Byzantine Fault Tolerance）</td>
</tr>
<tr>
<td>P2P</td>
<td>点对点（Peer to Peer）</td>
</tr>
<tr>
<td>DAPP</td>
<td>分布式应用（Decentralized Application）</td>
</tr>
<tr>
<td>KYC</td>
<td>客户识别（Know Your Customer）</td>
</tr>
<tr>
<td>RSA</td>
<td>RSA加密算法（RSA Algorithm）</td>
</tr>
<tr>
<td>ECC</td>
<td>椭圆加密算法（Elliptic Curve Cryptography）</td>
</tr>
<tr>
<td>BaaS</td>
<td>区块链即服务（Blockchain as a Service）</td>
</tr>
</tbody>
</table>
<a class="post-dummy-target" id="区块链的演进路径"></a><h4>区块链的演进路径</h4>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure1.png" alt="区块链的演进路径" class="lazyload"><figcaption class="image-caption">区块链的演进路径</figcaption></figure></p>
<a class="post-dummy-target" id="区块链类型"></a><h4>区块链类型</h4>
<ul>
<li>公有链：各个节点可以自由加入和退出网络，并参加链上数据的读写，运行时以扁平的拓扑结构互联互通，网络中不存在任何中心化的服务段节点</li>
<li>联盟链：各个节点通常由与之对应的实体机构组织，通过授权后才能加入与退出网络。各机构组织组成利益相关的联盟，共同维护区块链的健康运转</li>
<li>专有链：各个节点的写入权限归内部控制，而读取权限可视需求有选择性对外开放</li>
</ul>
<a class="post-dummy-target" id="区块链数据结构"></a><h4>区块链数据结构</h4>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure2.png" alt="区块链数据结构" class="lazyload"><figcaption class="image-caption">区块链数据结构</figcaption></figure></p>
<a class="post-dummy-target" id="3-bitcoin-a-peer-to-peer-electronic-cash-system"></a><h2>3 Bitcoin: A Peer-to-Peer Electronic Cash System</h2>
<ul>
<li>作者: Satoshi Nakamoto</li>
<li><a href="http://www.bitcoin.org/bitcoin.pdf" target="_blank">文章链接</a></li>
</ul>
<a class="post-dummy-target" id="文章贡献创新点-2"></a><h3>文章贡献/创新点</h3>
<p>比特币开篇之作，区块链的起点</p>
<a class="post-dummy-target" id="文章内容笔记-2"></a><h3>文章内容笔记</h3>
<a class="post-dummy-target" id="transactions交易"></a><h4>Transactions交易</h4>
<p>一个电子货币是一串数字签名的链条，其数据结构为，将上一个Transaction和本场交易的owner的公钥进行Hash并防止在本场交易的末尾。</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure3.png" alt="数字签名的链条" class="lazyload"><figcaption class="image-caption">数字签名的链条</figcaption></figure></p>
<a class="post-dummy-target" id="timestamp-server-时间戳"></a><h4>Timestamp Server 时间戳</h4>
<p>使用时间戳来解决，该电子货币没有在之前的交易中被其所有者签发给别人。同样也为链状结构，所以后者的交易会<font color="red">加强</font>前者交易的可信度，因为后者的Hash值需要使用到前者的Hash，所以前者交易无法更改，一旦更改，所有后面的时间戳的Hash都会跟着变化。</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure4.png" alt="时间戳" class="lazyload"><figcaption class="image-caption">时间戳</figcaption></figure></p>
<a class="post-dummy-target" id="proof-of-work-工作量证明"></a><h4>Proof-of-Work 工作量证明</h4>
<p>它需要找一个值经过Hash后能满足一定要求（如hash后要求有$N$个前导零），这个工作量会随着要求的变高而指数型增长，并且一个Block找到答案之后就进行下一个Block的答案寻找，下一个Block会保存前一个Block的Hash，所以一个Block找到答案后不能再进行修改。链条最长的是主链，只要诚实节点的算力大于其他节点，它开辟新Block的速度就比其他节点快，可以保证诚实节点能够占据主链。</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure5.png" alt="工作量证明" class="lazyload"><figcaption class="image-caption">工作量证明</figcaption></figure></p>
<a class="post-dummy-target" id="network-网络的运作"></a><h4>Network 网络的运作</h4>
<ul>
<li>新交易被广播到所有节点</li>
<li>每个节点将新交易纳入到block中</li>
<li>每个节点开始工作找它的block的解</li>
<li>当一个节点找到解之后，它会将这个区块广播给其他节点</li>
<li>当区块中所有交易合法并且没有被花费，其他节点就接受这个区块</li>
<li>所有节点开辟新的block并进行下一次工作量证明的计算</li>
</ul>
<a class="post-dummy-target" id="incentive-激励"></a><h4>Incentive 激励</h4>
<ul>
<li>新开辟区块的矿工拥有该区块的原始比特币</li>
<li>交易手续费</li>
</ul>
<a class="post-dummy-target" id="reclaiming-disk-space-需要的硬盘存储"></a><h4>Reclaiming Disk Space 需要的硬盘存储</h4>
<p>中本聪论文和目前情况比较由差异，他没想到显卡加入了计算行列，加强了全网算力。</p>
<p>区块的最后一个交易被挖掘之后，之前改区块的交易可以被抛弃（只留下必要的Hash值）,为了保证抛弃这些交易时能够不影响区块的Hash值，区块采用MerkleTree的树形结构。</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure6.png" alt="Merkle Tree" class="lazyload"><figcaption class="image-caption">Merkle Tree</figcaption></figure></p>
<a class="post-dummy-target" id="simplified-payment-verification-简化的交易验证"></a><h4>Simplified Payment Verification 简化的交易验证</h4>
<p>正常的验证需要验证所有节点，但是这个当诚实节点占据主算力时可以使用简化的交易验证。节点只需要保存所有之前区块的头部，但是它自己交易的验证，需要留给后一个区块，如果后面跟着一个区块，说明后者验证了前者的交易是正确的。</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure7.png" alt="交易验证" class="lazyload"><figcaption class="image-caption">交易验证</figcaption></figure></p>
<a class="post-dummy-target" id="4-智能合约安全漏洞研究综述"></a><h2>4 智能合约安全漏洞研究综述</h2>
<ul>
<li>作者：倪远东，张超，殷婷婷</li>
<li>DOI号: 10.19363/J.cnki.cn10-1380/tn.2020.05.07</li>
</ul>
<a class="post-dummy-target" id="文章贡献创新点-3"></a><h3>文章贡献/创新点</h3>
<ul>
<li>提出了智能合约三层威胁模型：高级语言、虚拟机、区块链三个层次的安全威胁</li>
<li>以以太坊为例，介绍了15类主要漏洞</li>
<li>总结了智能合约安全研究在漏洞方面的进制和挑战
<ul>
<li>自动漏洞挖掘</li>
<li>自动漏洞利用</li>
<li>按钮全防御</li>
</ul>
</li>
</ul>
<a class="post-dummy-target" id="文章内容"></a><h3>文章内容</h3>
<a class="post-dummy-target" id="智能合约特性"></a><h4>智能合约特性</h4>
<p><strong>运行环境</strong></p>
<p>智能合约运行在虚拟机上，如以太坊的智能合约运行在以太坊节点的以太坊虚拟机(EVM)，其架构层级如下图：</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure8.png" alt="以太坊节点结构" class="lazyload"><figcaption class="image-caption">以太坊节点结构</figcaption></figure></p>
<p>当客户端需要对智能合约的调用进行确认或者校验时，会调用虚拟机来解释执行智能合约代码，并校验计算结构是否正确。在以太坊的黄皮书中，EVM的技术架构和运行模式如下图所示：</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure9.png" alt="EVM的虚拟机架构" class="lazyload"><figcaption class="image-caption">EVM的虚拟机架构</figcaption></figure></p>
<p>虚拟机有三种不同的存储空间：</p>
<table>
<thead>
<tr>
<th>存储空间名</th>
<th>存储空间使用场景</th>
<th>访存粒度</th>
</tr>
</thead>
<tbody>
<tr>
<td>Stack</td>
<td>程序运行时保存临时数据</td>
<td>32字节</td>
</tr>
<tr>
<td>Memory</td>
<td>程序运行时用于保存数组、字符串</td>
<td>1字节</td>
</tr>
<tr>
<td>Storage</td>
<td>保存智能合约中需要被永久保存的重要全局变量</td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>生命周期</strong></p>
<ul>
<li>开发：使用Solidity,Vyper等（大部分使用Solidity）</li>
<li>编译：汇编编译为同一的智能合约字节码，同时合约被编译后会生成相应的合约调用接口（Application Binary Interface, ABI）</li>
<li>部署：部署需要一笔合约部署交易来完成，交易的数据字段被设置为合约的字节码，矿工进行交易打包时，会按照交易发送者的地址和交易序列号生成一个新地址，并将合约的字节码部署到该地址，这个新地址就是合约地址</li>
<li>调用：合约可以被区块链上的用户调用，有两种形式
<ul>
<li>普通地址发起的合约调用交易（交易调用Transaction Call），调用信息会留在区块数据中</li>
<li>合约发起的函数调用（消息调用Message），详细调用参数不会留在区块数据中</li>
</ul>
</li>
<li>销毁：销毁意味着，不能回后续调用，但合约代码和Storage存储都不会被删除，攻击者可能会恶意销毁而产生拒绝服务攻击。</li>
</ul>
<p><strong>程序特性</strong></p>
<ul>
<li>Gas机制</li>
<li>异常传递机制：对于外部函数调用（调用指定地址的合约函数），这种调用被成为低级调用，如果函数执行过程抛出异常，异常不会被传递。</li>
<li>委托调用（DELEGATECALL），属于外部函数调用的一种，在执行过程中会使用并改变函数调用者的上下文信息。</li>
<li>合约代码无法修改</li>
<li>全局状态与调用状态：特定漏洞的触发需要多笔交易组成的调用序列来完成。</li>
</ul>
<a class="post-dummy-target" id="智能合约安全威胁"></a><h4>智能合约安全威胁</h4>
<p>详细的威胁模型和安全漏洞见下表</p>
<table>
    <tr>
    	<td>威胁层次</td>
    	<td>安全漏洞</td>
        <td>备注</td>
    </tr>
    <tr>
        <td rowspan="8">高级语言层面</td>
        <td>变量覆盖</td>
        <td rowspan="8">高级语言层面引入，与高级语言设计模式、用户程序编写等有关</td>
    </tr>
    <tr>
        <td>整数溢出</td>
    </tr>
    <tr>
    	<td>未校验返回值</td>
    </tr>
    <tr>
    	<td>任意地址写入</td>
    </tr>
    <tr>
    	<td>拒绝服务</td>
    </tr>
    <tr>
        <td>资产冻结</td>
    </tr>
    <tr>
    	<td>未初始化变量</td>
    </tr>
    <tr>
        <td>影子变量</td>
    </tr>
    <tr>
    	<td rowspan="4">虚拟机层次</td>
        <td>重入</td>
        <td rowspan="4">虚拟机层面引入，与虚拟机及其字节码设计规范、虚拟机实现有关</td>
    </tr>
    <tr>
    	<td>短地址攻击</td>
    </tr>
    <tr>
    	<td>不一致性攻击</td>
    </tr>
    <tr>
    	<td>代码注入</td>
    </tr>
    <tr>
    	<td rowspan="3">区块链层面</td>
        <td>时间戳依赖</td>
        <td rowspan="3">区块链层面引入，主要与区块链本身的特性有关</td>
    </tr>
    <tr>
    	<td>条件竞争</td>
    </tr>
    <tr>
    	<td>随机性不足</td>
    </tr>
</table>
<a class="post-dummy-target" id="漏洞挖掘研究工作列表"></a><h4>漏洞挖掘研究工作列表</h4>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure10.png" alt="漏洞挖掘研究工作列表" class="lazyload"><figcaption class="image-caption">漏洞挖掘研究工作列表</figcaption></figure></p>
<a class="post-dummy-target" id="5-making-smart-contracts-smarter"></a><h2>5 Making Smart Contracts Smarter</h2>
<p>作者: Loi Luu, Duc-Hiep Chu, Hrishi Olickel, Prateek Saxena, Aquinas Hobor</p>
<p>DOI: 10.1145/2976749.2978309</p>
<a class="post-dummy-target" id="文章贡献"></a><h3>文章贡献</h3>
<ul>
<li>采用<font color="red">形式化方法</font>描述以太坊的智能合约（比较简陋），并针对其形式化的语法描述，提出交易顺序相关(Transaction-Ordering Dependence, TOD)，时间戳依赖(Timestamp Dependence)，未检查返回值(Mishandled Exceptions)和重入（Reentrancy Vulnerability）在语法中具体问题出在哪，并提出更好的语法描述</li>
<li>开发了<font color="red"><strong>OYENTE</strong></font>工具，采用了<font color="red">符号执行</font>的方法对EVM进行上述4个漏洞的检测（后续又新增了几种漏洞的检测）</li>
<li>通过OYENTE对现有智能合约进行量化分析</li>
</ul>
<a class="post-dummy-target" id="文章内容-1"></a><h3>文章内容</h3>
<a class="post-dummy-target" id="形式化方法"></a><h4>形式化方法</h4>
<p>具体见文章吧，有点晦涩，下图就是对区块的形成与验证的形式化方法描述</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure11.png" alt="形式化方法描述例子" class="lazyload"><figcaption class="image-caption">形式化方法描述例子</figcaption></figure></p>
<a class="post-dummy-target" id="oyente的结构"></a><h4>OYENTE的结构</h4>
<p>（关于对智能合约的符号执行，建议看一下360安全实验室的文章——<a href="https://blogs.360.cn/post/staticAnalysis_of_smartContract.html" target="_blank">区块链安全-以太坊智能合约静态分析</a>）</p>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure12.png" alt="OYENTE的结构" class="lazyload"><figcaption class="image-caption">OYENTE的结构</figcaption></figure></p>
<ul>
<li>CFG Builder，建立控制流图的</li>
<li>Explorer, 用python z3-solver进行求解</li>
<li>Core Analysis,针对文章关注的4个漏洞进行代码检查
<ul>
<li>TOD: 给不同的交易顺序，查看代码是否有不同的trace</li>
<li>Timestamp dependence: 特别标注时间戳变量，检查代码是否用到了这个时间戳变量</li>
<li>Mishandled exceptions:只要检查在在调用远程合约后有没有使用ISZERO这个指令来判断返回值是否为0</li>
<li>Reentrancy Detection: 每次遇到CALL，获取执行CALL之前的path condition，然后检查当变量值更新后，这个CALL的path condition是否还是可以被执行，如果还是可以被执行，说明有重入隐患</li>
</ul>
</li>
</ul>
<a class="post-dummy-target" id="思考问题"></a><h3>思考&amp;问题</h3>
<ul>
<li>文章只对4种漏洞进行检测，但根据上面一篇《智能合约安全漏洞研究综述》，我们可以发现，漏洞不止这一些
<ul>
<li>其他漏洞需要怎么通过这种符号执行的方法进行检测呢？</li>
</ul>
</li>
<li>进行形式化方法建模时，仅考虑了以太坊智能合约的部分feature</li>
<li>符号执行方法本身在碰到循环时会有一些问题，文章没有说，碰见循环采用什么策略
<ul>
<li>因为GAS机制，是不是本身就可以考虑循环次数有个上界？</li>
<li>KLEE的一些符号执行的技术能否用到这里以加快过程</li>
<li>能否结合Fuzzy Test的方法？</li>
</ul>
</li>
<li>学姐通过神经网络的方法预测是否有重入漏洞
<ul>
<li>用神经网络的方法是不是因为智能合约的代码在功能上可能存在相似性，所以可以由此及彼</li>
<li>对于一些神经网络能很快很准判断出来有漏洞的智能合约，采用神经网络判断，对于不能很快判断的再用符号执行</li>
</ul>
</li>
<li>能不能采用并发，或者SIMD的方法，进行高性能计算来加速漏洞的查找？</li>
</ul>
<a class="post-dummy-target" id="6-learning-to-fuzz-from-symbolic-execution-with-application-to-smart-contracts"></a><h2>6 Learning to Fuzz from Symbolic Execution with Application to Smart Contracts</h2>
<ul>
<li>作者: Jingxuan He, Mislav Balunovic, Nodar Ambroladze, Petar Tsankov, Martin Vechev</li>
<li>DOI: <a href="https://www.sci-hub.ren/10.1145/3319535.3363230" target="_blank">10.1145/3319535.3363230</a></li>
</ul>
<a class="post-dummy-target" id="文章贡献-1"></a><h3>文章贡献</h3>
<ul>
<li>使用RNN学习符号执行生成的交易序列，提高覆盖率</li>
<li>（更多待下一次补充）</li>
</ul>
<a class="post-dummy-target" id="文章内容-2"></a><h3>文章内容</h3>
<p>（待完成深度学习后再看一次文章）</p>
<a class="post-dummy-target" id="7-osiris-hunting-for-integer-bugs-in-ethereum-smart-contracts"></a><h2>7 OSIRIS: Hunting for Integer Bugs in Ethereum Smart Contracts</h2>
<ul>
<li>作者: Christof Ferreira Torres, Julian Schutte, Radu State</li>
<li>DOI: <a href="https://doi.org/10.1145/3274694.3274737" target="_blank">https://doi.org/10.1145/3274694.3274737</a></li>
</ul>
<a class="post-dummy-target" id="文章贡献创新点-4"></a><h3>文章贡献/创新点</h3>
<ul>
<li>在OYENTE的基础上实现了OSIRIS，可以针对整数的溢出以及运算问题（除0，取模0），截断错误进行判定</li>
<li>应用OSIRIS量化分析了智能合约
<ul>
<li>大部分智能合约存在字节码上完全相同的情况，这也导致了大部分运算问题由一部分智能合约被“扩散”至其他合约</li>
<li>运算问题中，整除问题扩散情况最为严重</li>
</ul>
</li>
</ul>
<a class="post-dummy-target" id="文章内容-3"></a><h3>文章内容</h3>
<a class="post-dummy-target" id="solidity中整数长度的问题"></a><h4>Solidity中整数长度的问题</h4>
<p>Solidity中整数有uint8和uint128等，但实际在EVM操作中他们都是uint256，编译器会在执行uint8或者uint128的操作中给他们进行位掩盖(mask)来进行截断。</p>
<a class="post-dummy-target" id="arithmetic-bugs-及其检测方式"></a><h4>Arithmetic bugs 及其检测方式</h4>
<p><strong>overflow and underflow 上溢和下溢</strong></p>
<p>在Path Constraints中新增一个Constraint，判断是否$<code>a+b&gt;2^n - 1</code>，下溢出以此类推</p>
<p><strong>除0错误</strong></p>
<p>新增一个Constraint判断除数是否为0</p>
<a class="post-dummy-target" id="truncation-bugs-截断错误"></a><h4>Truncation Bugs 截断错误</h4>
<p>Solidity使用<code>AND</code>和<code>SIGNEXTEND</code>进行截断和符号拓展，因此通过新增Constraint判断其是否超出output类型的范围。此外本文的实现碰到两种特殊情况将不认同是截断错误（由于这个是编译器引入的问题，无法消除）</p>
<ul>
<li>检测截断用的掩码是否是160个1，这个是用来地址相关操作的</li>
<li>检测截断用的掩码（在去除前导零的情况下）是否有0，这将过滤掉Solidity用以在一个数据Storage slot中挤多个变量</li>
</ul>
<a class="post-dummy-target" id="signedness-bugs"></a><h4>Signedness Bugs</h4>
<p>这里复用了Molnar的研究（Dynamic Test Generation to Find Integer Bugs in x86 Binary Linux Programs）。</p>
<p>将整数变量分4类:Top,Signed,Unsigned,Bottom，Top指的是还没有能够区分出是Signed或者Unsigned的整数变量，Signed和Unsigned是以区分的，Bottom是指将Unsigned操作和Signed操作混用的。</p>
<a class="post-dummy-target" id="类型推断"></a><h4>类型推断</h4>
<p>编译器在编译过程中，对于整数长度，将使用AND和字节掩码的方法进行掩盖，对于有符号整数，将使用一个操作码<code>SIGNEXTEND</code>来进行符号拓展，通过分析编译器的这两种行为来判断是否是有符号的，以及其长度是多少。</p>
<a class="post-dummy-target" id="污点分析-taint-analysis"></a><h4>污点分析 Taint Analysis</h4>
<p>数据一般从来源Source经过一些操作来到Sink（比如Storage或者Memmory），不从Source来的数据，没有流到Sink的数据都可以认为是黑客无法使用的，通过Taint Analysis可以降低Bugs的假阳性（这些被排除的Bug无法进行有效攻击）</p>
<a class="post-dummy-target" id="定义benign-integer-bugs"></a><h4>定义Benign Integer Bugs</h4>
<p>有一些Bug是程序员程序员把它视作一种feature，这种Bug是良性的，也应该排除，比如<code>((x+1)&lt;x)</code>或者<code>(x != (x*y)/y)</code>，这些是程序员用来判断溢出等问题的。</p>
<a class="post-dummy-target" id="评估"></a><h4>评估</h4>
<p>一开始主要是和ZEUS的一些对比。后面的量化分析中，发现96%的智能合约仅是copies，然后由于copy行为以及调用了不安全的代码库，导致一些Bug被传播出去。MODULO类型的Bug被传播得尤其狠。</p>
<p>时长与路径深度成正比。</p>
<a class="post-dummy-target" id="思考问题-1"></a><h3>思考&amp;问题</h3>
<ul>
<li>函数调用得序列？</li>
<li>其他类型的BUG检测？</li>
</ul>
<a class="post-dummy-target" id="font-colorred8-mpro-combining-static-and-symbolic-analysis-for-scalable-testing-of-smart-contractfont"></a><h2><font color="red">8 MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart Contract</font></h2>
<ul>
<li>作者：William Zhang, Vijay Ganesh, Sebastian Banescu, Leodardo Pasos, Steven Stewart</li>
<li>DOI: 10.1109/ISSRE.2019.00052</li>
</ul>
<a class="post-dummy-target" id="文章贡献-2"></a><h3>文章贡献</h3>
<ul>
<li>提供了一种结合静态分析和符号执行的智能合约检测方法，缓解了depth-n vulnerabilities，即函数调用组合爆炸，其主要的根据是：depth-n vulnerabilities的产生具有RAW特性即，storage变量先通过外界可获取的函数，写入数据，再读出来，所以本文通过工具<em>Slither</em>来获取每个函数的静态分析，有哪些storage变量被用作读，哪些storage变量被写入，然后构建函数之间基于storage读写的关系，这样可以在搜索树（或者说执行树）中剪除不可能发生depth-n vulnerabilities的函数调用，在我看来，就是剪枝</li>
<li>实现了这一个工具</li>
<li>用这个工具与Mythril-Classic进行比较，发现在准确率不变的条件下可以漏洞检测时间加速1.6倍以上</li>
</ul>
<a class="post-dummy-target" id="文章内容-4"></a><h3>文章内容</h3>
<a class="post-dummy-target" id="key-observation"></a><h4>key observation</h4>
<p>至少有一个状态变量依赖于于函数调用，才会导致depth-n vulnerability，因为对于临时变量，执行完就会被丢弃，无法产生depth-n vulnerability。所有的depth-n vulnerabilities都可以通过*Read After Write(RAW)*的函数依赖而被检测到。</p>
<a class="post-dummy-target" id="检测方法"></a><h4>检测方法</h4>
<ol>
<li>对于每个accessible function <em>f</em>，找到所有的state variables会在<em>f</em>中被用作读</li>
<li>对于每个在<em>f</em>中被读的state variable <em>v</em>，找到所有的函数（这些函数中会对<em>v</em>进行值得写入）</li>
<li>构建一个map,其key为每个accessible function <em>f</em>，其值为2中与这个函数<em>f</em>有<em>RAW</em>关系的函数集合</li>
</ol>
<a class="post-dummy-target" id="评估-1"></a><h3>评估</h3>
<p><figure><img src="/svg/loading.min.svg" data-sizes="auto" data-src="/images/202109-Blockchain/figure13.png" alt="MPro与Mythril-Classic的比较" class="lazyload"><figcaption class="image-caption">MPro与Mythril-Classic的比较</figcaption></figure></p>
<p>可以看在，在设定不同的Timeout情况以及不同的depth下，MPro对比Mythril-Classic都有不同程度的加速。至少都加速了1.6倍，节约了大量的时间。</p>
<a class="post-dummy-target" id="思考问题-2"></a><h3>思考&amp;问题</h3>
<p>以下是本文作者提出的，他认为的局限性：</p>
<ul>
<li>本文使用的工具<em>Slither</em>不是控制流敏感的，它只检测这个函数是否读、写了某个Storage，但是它不管在什么情况下读写，有些state variable可能是实际上无法到达的</li>
<li>没有优化符号执行本身</li>
<li>这个技术是基于源码的没有基于字节码</li>
</ul>
<p>本文作者认为的未来前景：</p>
<ul>
<li>发展一个基于Slither的符号执行技术，基于本文提出的MPro启发式符号执行引擎</li>
<li>并行处理符号执行与安全分析</li>
</ul>
</div><div class="post-footer" id="post-footer">
    <div class="post-info">
        <div class="post-info-line">
            <div class="post-info-mod">
                <span>本文于 2020-09-30 更新</span>
            </div>
            <div class="post-info-license"></div>
        </div>
        <div class="post-info-line">
            <div class="post-info-md"></div>
            <div class="post-info-share"><span><a href="//twitter.com/share?url=%2f2021%2f09%2f%25E5%258C%25BA%25E5%259D%2597%25E9%2593%25BE%25E4%25B8%258E%25E5%258C%25BA%25E5%259D%2597%25E9%2593%25BE%25E5%25AE%2589%25E5%2585%25A8%2f&amp;text=%e5%8c%ba%e5%9d%97%e9%93%be%26%e5%8c%ba%e5%9d%97%e9%93%be%e5%ae%89%e5%85%a8%e7%9b%b8%e5%85%b3%e6%96%87%e7%8c%ae%e9%98%85%e8%af%bb%e7%ac%94%e8%ae%b0&amp;via=" target="_blank" title="分享到 Twitter">
            <i class="fab fa-twitter fa-fw"></i>
        </a><a href="//www.facebook.com/sharer/sharer.php?u=%2f2021%2f09%2f%25E5%258C%25BA%25E5%259D%2597%25E9%2593%25BE%25E4%25B8%258E%25E5%258C%25BA%25E5%259D%2597%25E9%2593%25BE%25E5%25AE%2589%25E5%2585%25A8%2f" target="_blank" title="分享到 Facebook">
            <i class="fab fa-facebook-square fa-fw"></i>
        </a><a href="//reddit.com/submit?url=%2f2021%2f09%2f%25E5%258C%25BA%25E5%259D%2597%25E9%2593%25BE%25E4%25B8%258E%25E5%258C%25BA%25E5%259D%2597%25E9%2593%25BE%25E5%25AE%2589%25E5%2585%25A8%2f&amp;title=%e5%8c%ba%e5%9d%97%e9%93%be%26%e5%8c%ba%e5%9d%97%e9%93%be%e5%ae%89%e5%85%a8%e7%9b%b8%e5%85%b3%e6%96%87%e7%8c%ae%e9%98%85%e8%af%bb%e7%ac%94%e8%ae%b0" target="_blank" title="分享到 Reddit">
            <i class="fab fa-reddit fa-fw"></i>
        </a><a href="//service.weibo.com/share/share.php?url=%2f2021%2f09%2f%25E5%258C%25BA%25E5%259D%2597%25E9%2593%25BE%25E4%25B8%258E%25E5%258C%25BA%25E5%259D%2597%25E9%2593%25BE%25E5%25AE%2589%25E5%2585%25A8%2f&amp;appkey=&amp;title=%e5%8c%ba%e5%9d%97%e9%93%be%26%e5%8c%ba%e5%9d%97%e9%93%be%e5%ae%89%e5%85%a8%e7%9b%b8%e5%85%b3%e6%96%87%e7%8c%ae%e9%98%85%e8%af%bb%e7%ac%94%e8%ae%b0" target="_blank" title="分享到 Weibo">
            <i class="fab fa-weibo fa-fw"></i>
        </a></span></div>
        </div>
    </div>

    <div class="post-info-more">
        <section><span class="tag">
                        <a href="/tags/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8/"><i class="fas fa-tag fa-fw"></i>&nbsp;信息安全</a>&nbsp;
                    </span><span class="tag">
                        <a href="/tags/%E5%8C%BA%E5%9D%97%E9%93%BE/"><i class="fas fa-tag fa-fw"></i>&nbsp;区块链</a>&nbsp;
                    </span></section>
        <section>
            <span><a href="javascript:window.history.back();">返回</a></span>&nbsp;|&nbsp;<span><a href="/">主页</a></span>
        </section>
    </div>

    <div class="post-nav"><a href="/2021/03/risc-v-%E6%9E%B6%E6%9E%84%E5%AD%A6%E4%B9%A0/" class="prev" rel="prev" title="RISC-V 架构学习"><i class="fas fa-angle-left fa-fw"></i>RISC-V 架构学习</a>
            <a href="/2021/09/%E4%BF%A1%E6%81%AF%E8%AE%BA/" class="next" rel="next" title="信息论学习笔记">信息论学习笔记<i class="fas fa-angle-right fa-fw"></i></a></div>
</div><div class="post-comment"></div>
    </article></div>
            </main><footer class="footer">
    <div class="copyright"><div class="copyright-line">由 <a href="https://gohugo.io/" target="_blank" rel="external nofollow noopener noreffer">Hugo</a> 强力驱动 | 主题 - <a href="https://github.com/dillonzq/LoveIt" target="_blank" rel="external nofollow noopener noreffer">LoveIt<i class="far fa-heart fa-fw"></i></a>
        </div>

        <div class="copyright-line"><i class="far fa-copyright fa-fw"></i><span itemprop="copyrightYear">2020 - 2021</span><span class="author" itemprop="copyrightHolder">&nbsp;<a href="/" target="_blank">ChenDong Zhu</a></span>&nbsp;|&nbsp;<span class="license"><a rel="license external nofollow noopener noreffer" href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank">CC BY-NC 4.0</a></span><span class="icp-splitter">&nbsp;|&nbsp;</span><br class="icp-br"/>
                <span class="icp"><a href="http://beian.miit.gov.cn">苏ICP备2021012540号</a></span></div>
    </div>
</footer></div><a href="#" class="dynamic-to-top" id="dynamic-to-top" data-scroll>
            <span>&nbsp;</span>
        </a><script src="/js/lib/jquery/jquery.slim.min.js"></script><script src="/js/lib/lazysizes/lazysizes.min.js"></script><script src="/js/lib/smooth-scroll/smooth-scroll.polyfills.min.js"></script><script>window.scroll = new SmoothScroll('[data-scroll]', {speed: 300, speedAsDuration: true});</script><link rel="stylesheet" href="/css/lib/katex/katex.min.css"><script src="/js/lib/katex/katex.min.js"></script><script defer src="/js/lib/katex/auto-render.min.js"></script><link rel="stylesheet" href="/css/lib/katex/copy-tex.min.css"><script defer src="/js/lib/katex/copy-tex.min.js"></script><script defer src="/js/lib/katex/mhchem.min.js"></script><script>
        document.addEventListener("DOMContentLoaded", function () {
            renderMathInElement(document.body, {
                delimiters: [
                    { left: "$$", right: "$$", display: true },
                    { left: "\\(", right: "\\)", display: false },
                    { left: "\\[", right: "\\]", display: true },{ left: "$", right: "$", display: false },]
            });
        });
    </script>
    <script src="https://eqcn.ajz.miesnfu.com/wp-content/plugins/wp-3d-pony/live2dw/lib/L2Dwidget.min.js"></script>

    <script>
        var sUserAgent = navigator.userAgent.toLowerCase();
        if (/ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile/.test(sUserAgent)){
            
        }
        else{
            L2Dwidget.init({
                
                "model": {
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                                
                    jsonPath: "/data/Shinomiya_Kaguya/model.model.json",
                    "scale": 1
                },
                
                "display": {
                    "position": "left",
                    "width": 150,
                    "height": 300,
                    "hOffset": 0,
                    "vOffset": 0
                },
                "mobile": {
                    "show": true,
                    "scale": 0.5
                },
                "react": {
                    "opacityDefault": 1,
                    "opacityOnHover": 0.2
                }
            });
                function changebottom() {
                            var canvas_temp = document.getElementById("live2dcanvas");
            canvas_temp.style="position: fixed; opacity: 1; left: 0px; bottom: -100px; z-index: 99999; pointer-events: none;";
                }

            window.onload=changebottom;
        }


    </script><script src="/js/blog.min.js"></script>
</body>
</html>